home *** CD-ROM | disk | FTP | other *** search
- {
-
- Date: 07-03-94 (04:34) Number: 131410 of 132082 (Refer# NONE)
- To: KERRY SOKALSKY
- From: MARTIN_P@EFN.EFN.ORG
- Subj: Re: SWAG
- Read: 07-04-94 (01:01) Status: RECEIVER ONLY
- Conf: Internet_Mail (104) Read Type: READING ALL (+)
-
- From: Martin Preishuber <martin_p@efn.efn.org>
-
- postscrp.pas unit, to create postscript files.. it includes the
- common commands like line, outtext and so on
- psdemo.pas demo program for postscrp.pas. i made it to show, how
- to use the PSSetViewPort and PSOpen-commands.
-
- }
-
- PROGRAM PSDemo;
-
- USES Postscrp;
-
- BEGIN
- PSSetViewPort(0, 0, 21, 29.7);
- PSOpen('test.ps', 0, 479, 639, 479);
- PSTextSettings('Times-Roman', 40);
- PSOutTextXY(100, 100, 'Test');
- PSClose;
- END.
-
-
- UNIT PostScrp;
-
- INTERFACE
-
- USES Dos, Graph;
-
- TYPE Viereck = ARRAY[1..4] OF PointType;
- Polygon = ARRAY[1..100] OF PointType;
-
- PROCEDURE PSSetViewPort(x1, y1, x2, y2 : REAL);
- PROCEDURE PSSetGray(intensity : REAL);
- PROCEDURE PSSetCmykColor(cyan, magenta, yellow, black : REAL);
- PROCEDURE PSSetRGBColor(rot, gruen, blau : REAL);
- PROCEDURE PSSetHsbColor(hue, saturation, brightness : REAL);
- PROCEDURE PSTextSettings(font : STRING; groesse : WORD);
- PROCEDURE PSTextAngle(angle : REAL);
- PROCEDURE PSOuttextxy(x, y : REAL; s : STRING);
- PROCEDURE PSWriteNum(x, y, num : REAL);
- PROCEDURE PSCircle(x, y, radius : REAL);
- PROCEDURE PSLineWidth(x : REAL);
- PROCEDURE PSLine(x1, y1, x2, y2 : REAL);
- PROCEDURE PSRectangle(x1, y1, x2, y2 : REAL);
- PROCEDURE PSMoveTo(x, y : REAL);
- PROCEDURE PSLineTo(x, y : REAL);
- PROCEDURE PSBar(x1, y1, x2, y2 : REAL);
- PROCEDURE PsFillViereck(VAR points : Viereck);
- PROCEDURE PSFillPoly(anzahl : BYTE; VAR PolyPoints : Polygon);
- PROCEDURE PSOpen(filename : STRING; ursprx, urspry, maxx, maxy : WORD);
- PROCEDURE PSClose;
- FUNCTION PSError : BOOLEAN;
- FUNCTION PixelToZoll(x : REAL) : WORD;
-
- IMPLEMENTATION
-
- CONST einheit = 2.54/72;
- faktor = 3/140;
-
- VAR psfile : Text;
- error : BOOLEAN;
- dx, dy,
- ux1, uy1,
- xdim, ydim,
- diffx, diffy : REAL;
- newviewport : BOOLEAN;
-
- FUNCTION PSError : BOOLEAN;
- BEGIN
- PSError := error;
- END;
-
- PROCEDURE PSSetViewPort(x1, y1, x2, y2 : REAL);
- VAR breite,hoehe : REAL;
- BEGIN
- breite := x2 - x1;
- IF breite <= 0 THEN breite := 15;
- hoehe := y2 - y1;
- IF hoehe <= 0 THEN hoehe := 15;
- ux1 := x1 / einheit;
- uy1 := y1 / einheit;
- xdim := breite / einheit;
- ydim := hoehe / einheit;
- newviewport := TRUE;
- END;
-
- PROCEDURE PSSetGray(intensity : REAL);
- BEGIN
- WriteLn(psfile, intensity:4:2, ' sg');
- END;
-
- PROCEDURE PSSetRGBColor(rot, gruen, blau : REAL);
- BEGIN
- WriteLn(psfile, rot:4:2, ' ', gruen:4:2, ' ', blau:4:2, ' sr');
- END;
-
- PROCEDURE PSSetCmykColor(cyan, magenta, yellow, black : REAL);
- BEGIN
- WriteLn(psfile,cyan:4:2, ' ', magenta:4:2, ' ', yellow:4:2, ' ', black:4:2,'
- sc');
- END;
-
- PROCEDURE PSSetHsbColor(hue, saturation, brightness : REAL);
- BEGIN
- WriteLn(psfile, hue:4:2, ' ', saturation:4:2, ' ', brightness:4:2, ' sh');
- END;
-
- FUNCTION PixelToZoll(x : REAL) : WORD;
- BEGIN
- PixelToZoll := Round(x * dx);
- END;
-
- PROCEDURE PSTextSettings(font : STRING; groesse : WORD);
- BEGIN
- WriteLn(psfile, '/', font, ' findfont ',groesse,' scalefont setfont');
- END;
-
- PROCEDURE PSTextAngle(angle : REAL);
- BEGIN
- WriteLn(psfile, angle:4:2,' rotate');
- END;
-
- PROCEDURE PSOuttextxy(x,y : REAL; s : STRING);
- BEGIN
- x := x - diffx;
- y := diffy - y;
- WriteLn(psfile, x * dx:4:2, ' ', y * dy:4:2, ' m');
- WriteLn(psfile, '(',s,')', ' show');
- END;
-
- PROCEDURE PSWriteNum(x, y, num : REAL);
- VAR help : STRING;
- BEGIN
- x := x - diffx;
- y := diffy - y;
- Str(num:4:2, help);
- WriteLn(psfile, x * dx:4:2, ' ', y * dy:4:2, ' m');
- WriteLn(psfile, '(',help,')', ' show');
- END;
-
- PROCEDURE PSCircle(x, y, radius : REAL);
- BEGIN
- x := x - diffx;
- y := diffy - y;
- WriteLn(psfile, x * dx:4:2, ' ', y * dy:4:2, ' ', radius:4:2, ' 0 360 arc
- s');
- END;
-
- PROCEDURE PSLineWidth(x : REAL);
- BEGIN
- WriteLn(psfile, x:4:2, ' setlinewidth');
- END;
-
- PROCEDURE PSLine(x1, y1, x2, y2 : REAL);
- BEGIN
- x1 := x1 - diffx;
- y1 := diffy - y1;
- x2 := x2 - diffx;
- y2 := diffy - y2;
- WriteLn(psfile, x1 * dx:4:2, ' ', y1 * dy:4:2, ' m');
- WriteLn(psfile, x2 * dx:4:2, ' ', y2 * dy:4:2, ' l s');
- END;
-
- PROCEDURE PSRectangle(x1, y1, x2, y2 : REAL);
- VAR xn1, xn2, yn1, yn2 : REAL;
- BEGIN
- x1 := x1 - diffx;
- y1 := diffy - y1;
- x2 := x2 - diffx;
- y2 := diffy - y2;
- xn1 := x1 * dx;
- yn1 := y1 * dy;
- xn2 := x2 * dx;
- yn2 := y2 * dy;
- WriteLn(psfile, 'n');
- WriteLn(psfile, xn1:4:2, ' ', yn1:4:2, ' m');
- WriteLn(psfile, xn2:4:2, ' ', yn1:4:2, ' l');
- WriteLn(psfile, xn2:4:2, ' ', yn2:4:2, ' l');
- WriteLn(psfile, xn1:4:2, ' ', yn2:4:2, ' l');
- WriteLn(psfile, 'c s');
- END;
-
- PROCEDURE PSMoveTo(x, y : REAL);
- BEGIN
- x := x - diffx;
- y := diffy - y;
- WriteLn(psfile, x * dx:4:2, ' ', y * dy:4:2, ' m');
- END;
-
- PROCEDURE PSLineTo(x, y : REAL);
- BEGIN
- x := x - diffx;
- y := diffy - y;
- WriteLn(psfile, x * dx:4:2, ' ', y * dy:4:2, ' l');
- END;
-
- PROCEDURE PSBar(x1, y1, x2, y2 : REAL);
- VAR xn1, xn2, yn1, yn2 : REAL;
- BEGIN
- x1 := x1 - diffx;
- y1 := diffy - y1;
- x2 := x2 - diffx;
- y2 := diffy - y2;
- xn1 := x1 * dx;
- yn1 := y1 * dy;
- xn2 := x2 * dx;
- yn2 := y2 * dy;
- WriteLn(psfile, 'n');
- WriteLn(psfile, xn1:4:2, ' ', yn1:4:2, ' m');
- WriteLn(psfile, xn2:4:2, ' ', yn1:4:2, ' l');
- WriteLn(psfile, xn2:4:2, ' ', yn2:4:2, ' l');
- WriteLn(psfile, xn1:4:2, ' ', yn2:4:2, ' l');
- WriteLn(psfile, 'c');
- WriteLn(psfile, 'f');
- END;
-
- PROCEDURE PsFillViereck(VAR points : Viereck);
- BEGIN
- WriteLn(psfile, 'n');
- WriteLn(psfile, (points[1].x - diffx) * dx:4:2, ' ', (diffy - points[1].y) *
- dy:4:2, ' m');
- WriteLn(psfile, (points[2].x - diffx) * dx:4:2, ' ', (diffy - points[2].y) *
- dy:4:2, ' l');
- WriteLn(psfile, (points[3].x - diffx) * dx:4:2, ' ', (diffy - points[3].y) *
- dy:4:2, ' l');
- WriteLn(psfile, (points[4].x - diffx) * dx:4:2, ' ', (diffy - points[4].y) *
- dy:4:2, ' l');
- WriteLn(psfile, 'c');
- WriteLn(psfile, 'f');
- END;
-
- PROCEDURE PSFillPoly(anzahl : BYTE; VAR PolyPoints : Polygon);
- VAR i : BYTE;
- BEGIN
- IF anzahl = 1 THEN
- ELSE
- IF anzahl=2 THEN
- PSLine(PolyPoints[1].x, PolyPoints[1].y, PolyPoints[2].x,
- PolyPoints[2].y)
- ELSE
- BEGIN
- WriteLn(psfile, 'n');
- WriteLn(psfile, (PolyPoints[1].x - diffx) * dx:4:2, ' ', (diffy -
- PolyPoints[1].y) * dy:4:2, ' m');
- FOR i := 2 TO anzahl DO
- WriteLn(psfile, (PolyPoints[i].x - diffx) * dx:4:2, ' ', (diffy -
- PolyPoints[i].y) * dy:4:2, ' l');
- WriteLn(psfile, 'c');
- WriteLn(psfile, 'f');
- END;
- END;
-
- PROCEDURE PSOpen(filename : STRING; ursprx, urspry, maxx, maxy : WORD);
- BEGIN
- error:=FALSE;
- Assign(psfile,filename);
- {$I-}
- Rewrite(psfile);
- {$I+}
- IF IOResult<>0 THEN
- error:=FALSE
- ELSE
- BEGIN
- diffx:=ursprx;
- diffy:=urspry;
- IF newviewport THEN
- BEGIN
- WriteLn(psfile,'%!PS-Adobe-2.0');
- WriteLn(psfile,'/l',' ','{ lineto } def');
- WriteLn(psfile,'/li',' ','{ line } def');
- WriteLn(psfile,'/m',' ','{ moveto } def');
- WriteLn(psfile,'/f',' ','{ fill } def');
- WriteLn(psfile,'/n',' ','{ newpath } def');
- WriteLn(psfile,'/c',' ','{ closepath } def');
- WriteLn(psfile,'/s',' ','{ stroke } def');
- WriteLn(psfile,'/sr',' ','{ setrgbcolor } def');
- WriteLn(psfile,'/sh',' ','{ sethsbcolor } def');
- WriteLn(psfile,'/sc',' ','{ setcmykcolor } def');
- WriteLn(psfile,'/sg',' ','{ setgray } def');
- WriteLn(psfile,ux1:4:2,' ',uy1:4:2,' ','translate');
- dx:=xdim/maxx;
- dy:=ydim/maxy;
- END
- ELSE
- BEGIN
- dx:=800/maxx;
- dy:=750/maxy;
- END;
- WriteLn(psfile,'n');
- END;
- END;
-
- PROCEDURE PSClose;
- BEGIN
- WriteLn(psfile,'showpage');
- {$I-}
- Close(psfile);
- {$I+}
- IF IOResult<>0 THEN error:=TRUE;
- END;
-
- BEGIN
- newviewport:=FALSE;
- END.
-